#面向对象、类和对象、构造函数、析构函数
#面向过程：需要实现一个功能时，注重的是开发的步骤和过程，每一个步骤都需要自己亲力亲为，需要编写代码。（需要自己来完成）
#面向对象：需要实现一个功能时，不注重的是开发的步骤和过程，关心的是谁来帮我做这件事。
'''
面向对象的程序设计的核心是对象（上帝式思维），要理解对象为何物，
必须把自己当成上帝，上帝眼里世间存在的万物皆为对象，不存在的也
可以创造出来。

'''
#类和对象

'''
类：类是抽象概念--就是具有相同属性和功能的一类事物。
类仿佛是设计图。

对象：就是类的具体表现，是面向对象编程的核心。
对象是根据设计图造出来的具体东西。

类是抽象的概念。
对象是实实在在的存在。

'''
#定义类（class 为关键字）
'''
1.
class 类名:  （类名习惯使用大驼峰命名法：首字母大写，私有类可用一个下划线开头）
    pass    (类里面什么都没有，可用pass)

2.
class 类名:
    成员
'''
#class hero(object):   #object是python中所有类的最顶级父类
#   def info(self):   #info是实例方法，第一个参数一般是self，表示的是实例本身。
#也可以取其他名字，其作用是这个变量指向了实例对象。
#        print('hero')







#类的属性和方法
'''
属性：对象的特征描述（实际上是类中定义的变量，该变量为属性）
方法：对象具有的行为（本质是函数），类中定义的函数即是方法
例：
class Student():
    name = 'lucy'   #name是属性
    def info(self): #info是方法
        print(123)
'''
#对象的创建
'''
创建对象的格式： 对象名=类名()

例1：'''

#1.创建类
class hero(object):
    def info(self):         #实例方法,self指的是对应的实例对象
        print(self)
        print('self各不同，对象是出处')
#2.创建对象，实例化一个对象
hero1 = hero()               #创建的对象不限制数量
hero2 = hero()
hero3 = hero()
#3.调用实例方法
hero1.info()
print(hero1)   #打印的是对象的内存地址
hero2.info()
hero3.info()
print('\n')

#例2：
class Student():
    name = 'lucy'   #name是属性
    def info(self): #info是方法
        print(123)
print(Student.__dict__)  #查看类的属性
print(Student.__dict__['name'])  #查看特定属性name的值
print('\n')

#增删改查类中的单个属性
print(Student.name)    #作用改用
Student.name='哈哈'    #修改name的值
print(Student.name)
print('\n')
#del Student.name      #删除属性
#下面的打印语句报错，说明name属性已经被删除
#print(Student.name)   #AttributeError: type object 'Student' has no attribute 'name'

Student.walk = '跑路'  #新增属性
print(Student.walk)

#----小结：属性有则覆盖，无则添加。（类名.属性）


